const jwt = require('jsonwebtoken')
const bcrypt = require('bcryptjs')
const { getUserByUsername, getUserRoles, getBasicUserInfo } = require('../models/userModel')
const crypto = require('crypto')

const JWT_SECRET = 'your_jwt_secret' // 建议放到环境变量

exports.login = async (req, res) => {
  const { username, password } = req.body
  const user = await getUserByUsername(username)
  if (!user) return res.status(401).json({ message: '用户名或密码错误' })
  // 用MD5加密输入密码
  const md5Pwd = crypto.createHash('md5').update(password).digest('hex')
  if (md5Pwd !== user.password) return res.status(401).json({ message: '用户名或密码错误' })

  // 登录成功，生成 token 并获取角色信息
  const accessToken = jwt.sign({ userId: user.user_id }, JWT_SECRET, { expiresIn: '2h' })
  const roles = await getUserRoles(user.user_id) // 获取用户角色

  res.json({
    code: 1,
    data: {
      id: user.user_id, // 使用数据库中的 user_id
      realName: user.real_name, // 使用数据库中的 real_name
      roles: roles, // 使用查询到的角色
      accessToken: accessToken,
      username: user.username, // 使用数据库中的 username
    },
    message: 'success',
  })
}

exports.logout = (req, res) => {
  // 前端只需清除accessToken，后端可选实现黑名单
  res.json({
    code: 1,
    data: null,
    message: 'success',
  })
}

exports.getUserInfo = async (req, res) => {
  const userId = req.user.userId
  const user = await getBasicUserInfo(userId)
  const roles = await getUserRoles(userId)
  res.json({
    code: 1,
    data: {
      avatar: '',
      realName: user.real_name,
      roles,
      userId: String(user.user_id),
      username: user.username,
    },
    message: 'success',
  })
}
